<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class File_upload 
{
	public function __construct()
	{
				
	}
	
	/**
	 * Sluzi za multiupload file-ova preko SWF objekta
	 * @param string $dir - direktorijum u koji se upload-uju datoteke
	 */
	public function upload_file($dir)
	{					
		if( ! @dir($dir) ) // Direktorijum ne potoji
		{
			mkdir($dir,0777,true); // Kreiraj direktorijum
			chmod($dir, 0777);
		}
			
		
		if(count($_FILES) > 0) // Ako ima file-ova
		{
			$arrfile = current($_FILES); // Uzmi ime prvog iz niza
			$file_name = basename($arrfile['name']); // uzmi samo ime (izbaci njegovu originalnu putanju)
			$file_name = $this->remove_quotes($file_name);
			$uploadfile = $dir . $file_name;// // strtolower($file_name); // Kreiraj pun naziv datoteke (putanja + ime)
			
			move_uploaded_file($arrfile['tmp_name'], $uploadfile); // Uploaduj file
			
			return $file_name;
		}
	}
	
	
	
	public function upload( $field_name, $dir )
	{
		if( ! @dir($dir) ) // Direktorijum ne potoji
		{
			mkdir($dir,0777,true); // Kreiraj direktorijum
			chmod($dir, 0777);
		}
		
		if( @$_FILES[$field_name] > 0) // Ako ima file-ova
		{
			$arrfile = $_FILES[$field_name]; // Uzmi file
			$file_name = basename($arrfile['name']); // uzmi samo ime (izbaci njegovu originalnu putanju)
			$file_name = $this->remove_quotes($file_name);
            
            $file_name = $this->get_unique_filename($dir, $file_name);
            
			$uploadfile = $dir . "/" . $file_name;// // strtolower($file_name); // Kreiraj pun naziv datoteke (putanja + ime)
			
			move_uploaded_file($arrfile['tmp_name'], $uploadfile); // Uploaduj file
			
			return $file_name;
		}
	}
    
    
    public function upload_img( $dir, $field_name, $ext = null )
	{
		if( ! @dir($dir) ) // Direktorijum ne potoji
		{
			mkdir($dir,0777,true); // Kreiraj direktorijum
			chmod($dir, 0777);
		}
		
		if( @$_FILES[$field_name] > 0) // Ako ima file-ova
		{
			$arrfile = $_FILES[$field_name]; // Uzmi file
			$file_name = basename($arrfile['name']); // uzmi samo ime (izbaci njegovu originalnu putanju)
			$file_name = $this->remove_quotes( strtolower($file_name) );
            
            $file_name = $this->get_unique_filename($dir, $file_name);
            
			$uploadfile = $dir . "/" . $file_name;// // strtolower($file_name); // Kreiraj pun naziv datoteke (putanja + ime)
			if( $ext != null ) // Postoji provera po extenziji
            {
                if(in_array($arrfile['type'],$ext) )
                {
                    if(move_uploaded_file($arrfile['tmp_name'], $uploadfile)) // Uploaduj file
                        return array('status'=>1,'file_name' => $file_name);
                    else
                        return array('status'=>0,'msg' =>"ERROR: File '".$file_name."' not uploaded!");
                } 
                else
                    return array('status'=>0,'msg' =>"ERROR! File '".$file_name."' not allowed type! ");
            } 
            else // Nema provere po extenziji uploaduj fajl bilo kog tipa
            {
                if(move_uploaded_file($arrfile['tmp_name'], $uploadfile)) // Uploaduj file
                    return array('status'=>1,'file_name' => $file_name);
                else
                    return array('status'=>0,'msg' =>"ERROR! File '".$file_name."' not uploaded!");
            }
			
			
			
		}
	}
    
	
	/**
	 * Uploaduje file-ove iz vise file polja sa istim imenom { name='ime_polja[]'  }
	 * @param string $dir - direktorijum u koji se uploaduju file-ovi
	 * @param string $filed_names - ime polja u formi
	 */
	public function upload_files($dir,$filed_names,$ext = null)
	{
		if( !($handle = @dir($dir)) ) // Direktorijum ne potoji
		{
			mkdir($dir,0777,true); // Kreiraj direktorijum
			chmod($dir, 0777);
		}
		$data = NULL;
		
		if( isset($_FILES[$filed_names]))
		{
			$files = $_FILES[$filed_names]; // Preuzmi naziv file-a
			//$data[] = "";
			for($i=0; $i<count($files['name']); $i++)
			{
                $file_name = $this->remove_quotes( strtolower( $files['name'][$i] ) );
				$file_name = $this->get_unique_filename($dir, $file_name);
                if( null != $ext  ) // Ako postoji provera po extenzijama
                {                                    
                    if( in_array($files['type'][$i],$ext)) { //  Provera po extenzijama  
                        if( $files['error'][$i] == 0 ) // Nema greske prilikom uploada                      
                        {
                            // Kopiraj file iz TMP u destinacioni folder

                            $file_dest = $dir . "/" . $file_name;//  strtolower($files['name'][$i]);

                            if( move_uploaded_file($files['tmp_name'][$i], $file_dest) )
                                $data[] = $file_name;
                            else
                                $data[] = "<br/>ERROR! File '".$file_name."' not uploaded! ";
                        }
                    }  else {
                        $data[] = "<br/>ERROR! File '".$file_name."' not allowed type! ";
                    }
                } else { // Nema provere poextenzijama. Uploaduj sve fajlove
                    if( $files['error'][$i] == 0 ) // Nema greske prilikom uploada                      
                    {
                        // Kopiraj file iz TMP u destinacioni folder

                        $file_dest = $dir . "/" . $file_name;//  strtolower($files['name'][$i]);

                        if( move_uploaded_file($files['tmp_name'][$i], $file_dest) )
                            $data[] = $file_name;
                        else
                            $data[] = "<br/>ERROR! File '".$file_name."' not uploaded! ";
                    }
                }
                    
			}
		}
	
		return $data;
	}
	
	/**
	 * Daje spisak file-ova iz odredjenog foldera
	 * @param string $dir - puna putanja do foldera iz kog se citaju nazivi file-ova 
	 */
	public function get_file_names($dir)
	{
		$files = array();
		if( $handle = @dir($dir) ) // AKO Direktorijum potoji
		{
			// Procitaj sadrzaj foldera [nazive svih file-ova]
			while (false !== ($file_name = $handle->read())) {
				if( $file_name!="." && $file_name!=".." &&  $file_name!="thumb"  &&  $file_name!="mcith")
					$files[] =  $file_name;
			}
				
		}
		natsort($files);
		return $files;
	}
	
    /**
     * Generise unikatno ime file-a u odredjenom direktorijumu
     * @param string $dir - putanja direktorijuma
     * @param string $filename - naziv datoteke
     * @return string - unikatni naziv
     * 
     * Primer: 
     *   ulaz: datoteka.ext
     *   ako takva datoteka ne postoji u folderu $dir onda se vraca isto ime
     *   ako takva datoteka postoji onda se kreira drugo ime datoteka(x).ext
     *   gde je x prvi slobodan broj 1,2,3,...
     */
    public function get_unique_filename($dir,$filename)
    {
        $files = $this->get_file_names($dir);
       
        $file_info = pathinfo($filename);
        $basename = $file_info['filename'];
        $ext = $file_info['extension'];
        $i=1;
        
        while( in_array($filename, $files) ){
            $filename = $basename."(".$i.").".$ext;
            $i++;
        }
        return $filename;       
    }

	/**
	 * Pomera file-ove koji su preko SWF multiuploadera uplodovani
	 *
	 * Privremeno se file-ovi uploaduju u folder 'files/[sess_id]'
	 * @param string $source_dir - naziv izvornog foldera 
	 * @param string $dest_dir   - naziv odredisnog foldera
	 */
	public function move_temp_uploaded_files($source_dir,$dest_dir)
	{
		//print "Source = $source_dir DEST = $dest_dir";
		//die();
		if( $handle = @dir($source_dir) ) // AKO izvorni Direktorijum potoji
		{
			if( ! @dir($dest_dir) ) // Destinacioni Direktorijum ne potoji
			{
				mkdir($dest_dir,0777,true); // Kreiraj direktorijum
				chmod($dest_dir, 0777);
			}
			// Procitaj sadrzaj foldera [nazive svih file-ova] izvornog direktorijuma
			while (false !== ($file_name = $handle->read())) 
			{
				if( $file_name!="." && $file_name!=".." )
				{
					$source_file = $source_dir . $file_name;
					$dest_file	 = $dest_dir . $file_name;// strtolower($file_name);
					
					copy($source_file, $dest_file);		// kopiraj u destinacioni
					unlink($source_file); // obrisi izvorni file
				}
			}
			// Obrisi izvorni direktorijum
			rmdir($source_dir);
		}
	}
	
	public function remove_quotes($string)
	{
		$string = str_replace('"', "", $string);
		$string = str_replace("'", "", $string);
		return $string;		
	}
 
}

/* End of file File_upload.php */